// ISecurityUnitManager.aidl
package com.sgcc.pda.hw;
import com.sgcc.pda.hw.ReturnResult;
import com.sgcc.pda.hw.MeterAuthorityInfo;
import com.sgcc.pda.hw.SecurityUnitRegisterInfo;
// Declare any non-default types here with import statements

interface ICommonUtilManager {

    /**
     * 注册安全单元信息
     *
     * @param securityUnitRegister 安全单元注册的信息
     * @return ReturnResult  :int code  0 成功  其他失败
     *                       :List<String> datas（code==0）:   size==0
     *                                      0:操作员编号
     *                                      1:操作员权限
     *                                      2:掩码信息
     *                     :List<String> datas(code==其他):
     *                                 0：失败的描述
     */
    ReturnResult securityRegisterInfo(in SecurityUnitRegisterInfo securityUnitRegister);

    /**
     * 电表注册权限信息
     *
     * @param meterRegisterAuthInfo 表的权限信息
     * @return ReturnResult  :int code  0 成功  其他失败
     *                       :List<String> datas（code==0）:   size==0
     *                      :List<String> datas(code==其他):
     *                                      0：失败的描述
     */
    ReturnResult meterRegisterAuthInfo(in MeterAuthorityInfo meterAuthorityInfo);

    /**
     * 电表进行红外身份认证（使用之前先进行调用meterRegisterAuthInfo注册红外相关权限）
     *
     * @param meterAddress 表地址
     * @param keyType      密钥类型 00公钥 01私钥
     * @param operator     操作员编号
     * @return ReturnResult  :int code  0 成功  其他失败
     *                       :List<String> datas（code==0）:   size==0
     *                       :List<String> datas(code==其他):
     *                                        0：失败的描述
     */
    ReturnResult infraIdentity(String meterAddress,String keyType,String operator);

    /**
     * 电表进行远程身份认证
     *
     * @param meterAddress 表地址
     * @param keyType      密钥类型 00公钥 01私钥
     * @param mode         通讯方式：0 红外  1 串口(485线)
     * @return ReturnResult  :int code  0 成功  其他失败
     *                      :List<String> datas（code==0）:   size==0
     *                                  0:rand2 执行远程身份认证之后获取的电表随机数2
     *                                  1:esamNo 执行身份认证之后获取的电表ESAM编号
     *                    :List<String> datas(code==其他):
     *                                  0：失败的描述
     */
    ReturnResult remoteIdentity(String meterAddress,String keyType,String operator,int mode);

   /**
     * 打开红外或串口
     *
     * @param mode    通信方式 0 默认普通红外 1串口 2普通红外 3 激光红外
     * @return 0成功 其他失败
     */
   ReturnResult onInfraInit(int mode);
     /**
     * 关闭红外或串口
     *
     * @param mode    通信方式 0 默认普通红外 1串口 2普通红外 3 激光红外
     * @return 0成功 其他失败
     */
   ReturnResult onInfraDeInit(int mode);
   /**
     * 设置通信超时时间，如何串口已经打开，则改变为关闭状态，需要重新打开后生效
     *
     * @param sendTimeOut    发送超时时间 毫秒
     * @param receiveTimeOut 接收超时时间 毫秒
     */
       void setInfraTimeOut(int sendTimeOut, int receiveTimeOut) ;


           /**
            * 电表进行红外身份认证（使用之前先进行调用meterRegisterAuthInfo注册红外相关权限）
            *
            * @param meterAddress 表地址
            * @param keyType      密钥类型 00公钥 01私钥
            * @param mode     类型
            * @return ReturnResult  :int code  0 成功  其他失败
            *                       :List<String> datas（code==0）:   size==0
            *                       :List<String> datas(code==其他):
            *                                        0：失败的描述
            */
           ReturnResult infraIdentityV1(String meterAddress,String keyType, int mode);
           ReturnResult sendRecordData698V1(String meterAddress, String taskData, int mode, boolean checkDar);
           ReturnResult sendRecordData698ForFrameDataV1(String meterAddress, String taskData, int mode, boolean checkDar);

}
